package cn.cjxy.userManageMent.controller;

import cn.cjxy.userManageMent.domain.User;
import cn.cjxy.userManageMent.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpSession;
import java.util.List;

@Controller
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @Autowired
    private HttpSession session;
    /**
     *
     * @param user  装用户名和密码
     * @param checkCode  验证码
     * @param model 存储登录信息
     * @return
     */
    @RequestMapping("/login")
    public String login(User user, String checkCode, Model model){
        //获取验证码
        String sessionCode =(String) session.getAttribute("sessionCode");

        //对比验证码
        if (!checkCode.equals(sessionCode)){
            model.addAttribute("error","验证码错误！");
            //转发到登录页
            return "forward:/login.jsp";
        }

        //根据用户名查询用户
       User dbUser=userService.findByUsername(user.getUsername());
        //如果没查到或者密码对不上
        if (dbUser ==null || !user.getPassword().equals(dbUser.getPassword())){
            model.addAttribute("error","用户名或密码错误！");
            //转发到登录页
            return "forward:/login.jsp";
        }
        //能查到
        //保存用户信息
        session.setAttribute("loginUser",dbUser);
        //跳转到首页
        return "redirect:/user/list";
    }
    /**
     * 查询所有信息接口
     * 构建出前端所需的数据格式。携带数据跳转到list.jsp并显示
     */
    @RequestMapping("/list")
    public String list(Model model){

        List<User> all = userService.findAll();
        //将数据放入作用域
        model.addAttribute("userList",all);
        //跳转到list.jsp
        return "/list.jsp";
    }

    /**
     * 根据id回显修改用户的数据
     * @param id
     * @param model
     * @return
     */
    @RequestMapping("/userDetail")
    public String updateDetail(Integer id, Model model){
        User user=userService.findById(id);
        //将用户信息放入作用域
        model.addAttribute("user",user);
        //携带用户信息跳转到修改页面 完成数据回显
        return "/update.jsp";
    }

    /**
     * 真正的修改逻辑
     * @param user
     * @return
     */
    @RequestMapping("/update")
    public String update(User user){
        userService.update(user);
        //修改完刷新页面  重定向到首页
        return "redirect:/user/list";
    }

    /**
     * 删除接口
     * @param id
     * @return
     */
    @RequestMapping("/delete")
    public String delete(Integer id){
        userService.delete(id);
        //删除完刷新页面  重定向到首页
        return "redirect:/user/list";
    }


    @RequestMapping("/save")
    public String save(User user){
        userService.add(user);
        //新增完刷新页面  重定向到首页
        return "redirect:/user/list";
    }
}
